﻿-------------------------------------------------------------------------------------------------------
----------------------------------pca_ventas.comprobantes----------------------------------------------
-------------------------------------------------------------------------------------------------------

CREATE OR REPLACE FUNCTION pca_ventas.fn_add_comprobante(varchar,--empresa_id $1
							 varchar,--oficina_id $2
							 varchar,--tipo_comprobante_id $3
							 bigint,--sesion_id $4
							 integer,--serie $5
							 integer,--numero $6
							 bigint,--cliente_id $7
							 varchar,--num_doc_identidad $8
							 varchar,--nombre_cliente $9
							 varchar,--direccion_cliente $10
							 varchar,--plazo_id $11
							 timestamp with time zone,--fecha_hora_emision $12
							 timestamp with time zone,--fecha_hora_vencimiento $13
							 boolean,--precios_incluyen_igv $14
							 numeric,--porcentaje_igv $15
							 varchar,--moneda_id $16
							 numeric,--importe_bruto $17
							 numeric,--descuento $18
							 numeric,--valor_venta $19
							 numeric,--impuesto $20
							 numeric,--precio_venta $21
							 numeric,--tipo_cambio_emision $22
							 varchar,--estado_comprobante_id $23
							 text,--adicional1 $24
							 text,--adicional2 $25
							 text,--adicional3 $26
							 text --adicional4 $27
							 )RETURNS bigint AS
$$
BEGIN
	INSERT INTO pca_ventas.comprobantes
		(empresa_id,
		 oficina_id,
		 tipo_comprobante_id,
		 sesion_id,
		 serie,
		 numero,
		 cliente_id,
		 num_doc_identidad,
		 nombre_cliente,
		 direccion_cliente,
		 plazo_id,
		 fecha_hora_emision,
		 fecha_hora_vencimiento,
		 precios_incluyen_igv,
		 porcentaje_igv,
		 moneda_id,
		 importe_bruto,
		 descuento,
		 valor_venta,
		 impuesto,
		 precio_venta,
		 tipo_cambio_emision,
		 estado_comprobante_id,
		 adicional1,
		 adicional2,
		 adicional3,
		 adicional4)
	VALUES
		($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27);

	RETURN pca_global.fn_pseudo_encrypt_bigint(currval('pca_ventas.seq_comprobante_id')::integer);
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca_ventas.fn_get_comprobante(varchar,--empresa_id $1
							 varchar,--oficina_id $2
							 bigint --comprobante_id $3
							 )RETURNS SETOF pca_ventas.vw_comprobantes AS
$$
DECLARE
	_row pca_ventas.vw_comprobantes%ROWTYPE;
BEGIN
	FOR _row IN
		SELECT
			*
		FROM
			pca_ventas.vw_comprobantes
		WHERE
			empresa_id = $1 AND
			oficina_id = $2 AND
			comprobante_id = $3
	LOOP
		RETURN NEXT _row;
	END LOOP;
END;
$$
LANGUAGE plpgsql;

-------------------------------------------------------------------------------------------------------
------------------------------pca_ventas.detalles_comprobante------------------------------------------
-------------------------------------------------------------------------------------------------------
CREATE OR REPLACE FUNCTION pca_ventas.fn_add_detalle_comprobante(varchar,--empresa_id $1
								 varchar,--oficina_id $2
								 bigint,--comprobante_id $3
								 bigint,--sesion_id $4
								 integer,--correlativo $5
								 bigint,--articulo_id $6
								 varchar,--codigo $7
								 numeric,--cantidad $8
								 varchar,--medida $9
								 text,--descripcion $10
								 numeric,--precio_unitario $11
								 numeric,--precio_costo $12
								 numeric --precio_total $13
								 )RETURNS bigint AS
$$
BEGIN
	INSERT INTO pca_ventas.detalles_comprobante
		(empresa_id,
		oficina_id,
		comprobante_id,
		sesion_id,
		correlativo,
		articulo_id,
		codigo,
		cantidad,
		medida,
		descripcion,
		precio_unitario,
		precio_costo,
		precio_total)
	VALUES
		($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13);

	RETURN pca_global.fn_pseudo_encrypt_bigint(currval('pca_ventas.seq_detalle_id')::integer);
END;
$$
LANGUAGE plpgsql;

-------------------------------------------------------------------------------------------------------
--------------------------------pca_ventas.pagos_comprobante-------------------------------------------
-------------------------------------------------------------------------------------------------------

CREATE OR REPLACE FUNCTION pca_ventas.fn_add_pago_comprobante(varchar,--empresa_id $1
							      varchar,--oficina_id $2
							      bigint,--comprobante_id $3
							      varchar,--medio_pago_id $4
							      numeric,--efectivo_percibido $5
							      bigint,--grupo_movimiento_id $6
							      bigint,--subgrupo_movimiento_id $7
							      bigint,--sesion_id $8
							      date,--fecha $9
							      bigint,--liquidacion_id $10
							      character,--usuario_id $11
							      varchar,--detalle $12
							      varchar,--moneda_id $13
							      numeric --monto $14
							      )RETURNS bigint AS
$$
DECLARE
	_movimiento_id bigint;
BEGIN
	_movimiento_id := pca_caja.fn_add_movimiento($1,$2,$6,$7,$8,$9,$10,$11,$12,$13,$14);

	INSERT INTO pca_ventas.pagos_comprobante
		(empresa_id,
		 oficina_id,
		 comprobante_id,
		 medio_pago_id,
		 efectivo_percibido,
		 movimiento_id)
	VALUES
		($1,$2,$3,$4,$5,_movimiento_id);

	RETURN pca_global.fn_pseudo_encrypt_bigint(currval('pca_ventas.seq_pago_id')::integer);
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca_ventas.fn_get_pago_comprobante(varchar,--empresa_id $1
							      bigint --pago_id $2
							      )RETURNS SETOF pca_ventas.vw_pagos_comprobante AS
$$
DECLARE
	_row pca_ventas.vw_pagos_comprobante%ROWTYPE;
BEGIN
	FOR _row IN
		SELECT
			*
		FROM
			pca_ventas.vw_pagos_comprobante
		WHERE
			empresa_id = $1 AND
			pago_id = $2
	LOOP
		RETURN NEXT _row;
	END LOOP;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION pca_ventas.fn_get_list_pagos_comprobante(varchar,--empresa_id $1
								    varchar,--oficina_id $2
								    bigint --comprobante_id $3
								    )RETURNS SETOF pca_ventas.vw_pagos_comprobante AS
$$
DECLARE
	_row pca_ventas.vw_pagos_comprobante%ROWTYPE;
BEGIN
	FOR _row IN
		SELECT
			*
		FROM
			pca_ventas.vw_pagos_comprobante
		WHERE
			empresa_id = $1 AND
			oficina_id = $2 AND
			comprobante_id = $3
	LOOP
		RETURN NEXT _row;
	END LOOP;
END;
$$
LANGUAGE plpgsql;